package mercadologico.gui.produto;
//modelo.setRowCount(0); 
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.ListCellRenderer;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;

import mercadologico.action.ProdutoActionManager;
import mercadologico.dao.PersistenceProduto;
import mercadologico.entities.tables.Marca;
import mercadologico.entities.tables.Medida;
import mercadologico.entities.tables.Produto;
import mercadologico.entities.tables.Similaridade;
import mercadologico.gui.marca.MarcaPesquisa;
import mercadologico.gui.produto.util.ProdutoCadastroTableModel;
import mercadologico.gui.produto.util.ProdutoPesquisaVariacaoCombobox;
import exceptions.PersistenceExceptionMessage;
import fiscal.action.MoldeProdutoActionManager;
import fiscal.entities.tables.MoldeProduto;
import fiscal.gui.moldeProduto.MoldeProdutoPesquisa;
import generic.gui.util.CalculaDiasEntreDatas;
import generic.gui.util.DefaultFormatterFactoryMask;
import generic.gui.util.FixedLengthDocument;
import generic.gui.util.FocusEstadoTextFormatter;


@SuppressWarnings("serial")
public class ProdutoCadastro extends JDialog {
	
	public final static int MAX_LENGTH_VARIAVEL = 10;
	public final static int MAX_LENGTH_BARRAS = 14;
	public final static int MAX_LENGTH_DESCRICAO_COMPLETA = 60;
	public final static int MAX_LENGTH_DESCRICAO_REDUZIDA = 22;

	private final JPanel contentPanel = new JPanel();
	private JLabel lblModeloDeProduto;
	private JTextField txtMoldProduto;
	private JButton btnPesqMarca;
	private JLabel lblDescrioCompleta;
	private JTextField txtDescCompleta;
	private JLabel lblMarca;
	private JComboBox<?> comboBoxMarca;
	private JLabel lblNewLabel;
	private JFormattedTextField formatterQtdeEmbalagem;
	private JButton btnPesqMolProd;
	private JCheckBox chckbxManual;
	private JLabel lblDescrioReduzida;
	private JTextField txtDescReduzida;
	private JButton btnGeraReduzido;
	private JTabbedPane tabbedPane;
	private JPanel panelProduto;
	private JPanel panelSimilaridade;
	private JLabel lblCdigo;
	private JTextField txtCodigo;
	private JLabel lblIncluso;
	private JLabel lblAlterao;
	private JButton btnSalvar;
	private JButton btnSair;
	private JPanel panelBarras;
	private JTextField txtBarra1;
	private JTextField txtBarra2;
	private JLabel lblBarra;
	private JLabel lblBarra_1;
	private JPanel panelDimensao;
	private JLabel lblProduto;
	private JLabel lblEmbalagem;
	private JLabel lblComprimento;
	private JLabel lblLargura;
	private JLabel lblAltura;
	private JFormattedTextField formatterCompProduto;
	private JFormattedTextField formattertLargProduto;
	private JFormattedTextField formatterAltuProduto;
	private JLabel label;
	private JLabel label_1;
	private JLabel label_2;
	private JFormattedTextField formatterAltuEmbalagem;
	private JFormattedTextField formatterLargEmbalagem;
	private JFormattedTextField formatterCompEmbalagem;
	private JPanel panelEstocagem;
	private JLabel lblArmagenamento;
	private JLabel lblDiasParaVencimento;
	private JTextField txtDiasVenc;
	private JComboBox<?> comboBoxEstoque;
	private JButton btnPesqEstoque;
	private JButton btnCalcDias;
	private JPanel panelComposicao;
	private JLabel lblVariao_1;
	private JTextField txtVariacaoSimilar;
	private JLabel lblBarras;
	private JLabel lblBarras_1;
	private JTextField txtBarra2Similar;
	private JTextField txtBarra1Similar;
	private JButton btnIncluirSimilar;
	private JPanel panelTableSimilares;
	private JScrollPane scrollPane;
	private JTable tableSimilaridade;
	private JButton btnExcluir;
	private JPanel panelDecomposicao;
	private JLabel lblVariao_2;
	private JComboBox<?> comboBoxVariacaoComposicao;
	private JButton btnAdicionarComposicao;
	private JButton btnAlterarComposicao;
	private JPanel panelTableComp;
	private JScrollPane scrollPane_1;
	private JButton btnExcluirComposicao;
	private JTable tableComposicao;
	private JFormattedTextField formatterCodProdutoDecomposicao;
	private JLabel lblProduto_1;
	private JButton btnPesquisaProdutoDecom;
	private JFormattedTextField formatterFracaoDecomp;
	private JButton btnIncluirDecomp;
	private JPanel panelTableDecomp;
	private JScrollPane scrollPane_2;
	private JButton btnExcluirDecomp;
	private JTable tableDecomposicao;
	private JLabel lblPercentualNoInformado;
	private JLabel label_3;
	private JLabel label_4;
	private JTextField txtVariacao;
	private JFormattedTextField formatterFatorDecomp;
	private JLabel lblFrao;
	private JLabel lblFator;
	
	private Integer contDeduzido;
	private Integer linhaAlteracaoSimilaridade;
	
	private boolean alterarSimiliar = false;
	
	private Produto produtoPrincipal;
	
	private MoldeProduto moldeProduto;
	private ProdutoActionManager action;
	private JCheckBox chckbxTodos;
	private JComboBox<?> comboBoxUnidadeVenda;
	private JLabel lblUnidVen;


	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			PersistenceProduto pp = new PersistenceProduto();
			new ProdutoCadastro(pp.find(95)).setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public ProdutoCadastro() {
		try {
			setBounds(100, 100, 568, 620);
			setResizable(false);
			setLocationRelativeTo(null);
			setModal(true);
			getContentPane().setLayout(new BorderLayout());
			contentPanel.setAlignmentY(0.0f);
			contentPanel.setAlignmentX(0.0f);
			contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
			getContentPane().add(contentPanel, BorderLayout.NORTH);
			GroupLayout gl_contentPanel = new GroupLayout(contentPanel);
			gl_contentPanel.setHorizontalGroup(
				gl_contentPanel.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_contentPanel.createSequentialGroup()
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_contentPanel.createSequentialGroup()
								.addGap(27)
								.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
									.addComponent(getLblDescrioReduzida(), GroupLayout.PREFERRED_SIZE, 134, GroupLayout.PREFERRED_SIZE)
									.addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING, false)
										.addGroup(gl_contentPanel.createSequentialGroup()
											.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
												.addGroup(gl_contentPanel.createSequentialGroup()
													.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING, false)
														.addGroup(gl_contentPanel.createSequentialGroup()
															.addComponent(getLblMarca())
															.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
															.addComponent(getLblUnidVen(), GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE))
														.addGroup(gl_contentPanel.createSequentialGroup()
															.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
																.addGroup(gl_contentPanel.createSequentialGroup()
																	.addComponent(getComboBoxMarca(), GroupLayout.PREFERRED_SIZE, 197, GroupLayout.PREFERRED_SIZE)
																	.addPreferredGap(ComponentPlacement.RELATED)
																	.addComponent(getBtnPesqMarca()))
																.addComponent(getLblDescrioCompleta()))
															.addPreferredGap(ComponentPlacement.RELATED)
															.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING, false)
																.addComponent(getComboBoxUnidadeVenda(), 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
																.addComponent(getChckbxManual(), GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE))))
													.addPreferredGap(ComponentPlacement.RELATED)
													.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
														.addGroup(gl_contentPanel.createSequentialGroup()
															.addComponent(getLblNewLabel())
															.addGap(18)
															.addComponent(getLabel_4(), GroupLayout.PREFERRED_SIZE, 61, GroupLayout.PREFERRED_SIZE))
														.addGroup(gl_contentPanel.createSequentialGroup()
															.addComponent(getFormatterQtdeEmbalagem(), GroupLayout.PREFERRED_SIZE, 67, GroupLayout.PREFERRED_SIZE)
															.addPreferredGap(ComponentPlacement.RELATED)
															.addComponent(getTxtVariacao(), GroupLayout.DEFAULT_SIZE, 104, Short.MAX_VALUE)))
													.addPreferredGap(ComponentPlacement.RELATED))
												.addGroup(gl_contentPanel.createSequentialGroup()
													.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
														.addGroup(gl_contentPanel.createSequentialGroup()
															.addComponent(getTxtMoldProduto(), GroupLayout.PREFERRED_SIZE, 377, GroupLayout.PREFERRED_SIZE)
															.addPreferredGap(ComponentPlacement.RELATED)
															.addComponent(getBtnPesqMolProd()))
														.addComponent(getLblModeloDeProduto(), GroupLayout.PREFERRED_SIZE, 127, GroupLayout.PREFERRED_SIZE))
													.addPreferredGap(ComponentPlacement.RELATED)
													.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
														.addGroup(gl_contentPanel.createSequentialGroup()
															.addComponent(getLblCdigo())
															.addGap(46))
														.addComponent(getTxtCodigo(), 0, 0, Short.MAX_VALUE))))
											.addPreferredGap(ComponentPlacement.RELATED, 40, GroupLayout.PREFERRED_SIZE))
										.addGroup(gl_contentPanel.createSequentialGroup()
											.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
												.addComponent(getTabbedPane(), GroupLayout.DEFAULT_SIZE, 498, Short.MAX_VALUE)
												.addGroup(gl_contentPanel.createSequentialGroup()
													.addGap(5)
													.addComponent(getLblIncluso())
													.addGap(102)
													.addComponent(getLblAlterao()))
												.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING, false)
													.addComponent(getTxtDescCompleta())
													.addGroup(gl_contentPanel.createSequentialGroup()
														.addComponent(getTxtDescReduzida(), GroupLayout.PREFERRED_SIZE, 464, GroupLayout.PREFERRED_SIZE)
														.addPreferredGap(ComponentPlacement.RELATED)
														.addComponent(getBtnGeraReduzido()))))
											.addGap(34)))))
							.addGroup(gl_contentPanel.createSequentialGroup()
								.addGap(193)
								.addComponent(getBtnSalvar(), GroupLayout.PREFERRED_SIZE, 77, GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.RELATED)
								.addComponent(getBtnSair(), GroupLayout.PREFERRED_SIZE, 77, GroupLayout.PREFERRED_SIZE)))
						.addContainerGap(27, Short.MAX_VALUE))
			);
			gl_contentPanel.setVerticalGroup(
				gl_contentPanel.createParallelGroup(Alignment.TRAILING)
					.addGroup(gl_contentPanel.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblModeloDeProduto())
							.addComponent(getLblCdigo()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
							.addComponent(getTxtCodigo(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getBtnPesqMolProd())
							.addComponent(getTxtMoldProduto(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING, false)
							.addGroup(gl_contentPanel.createSequentialGroup()
								.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
									.addComponent(getLblNewLabel())
									.addComponent(getLblUnidVen())
									.addComponent(getLabel_4()))
								.addPreferredGap(ComponentPlacement.RELATED)
								.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
									.addComponent(getBtnPesqMarca())
									.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
										.addComponent(getComboBoxUnidadeVenda(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
										.addComponent(getFormatterQtdeEmbalagem(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
										.addComponent(getTxtVariacao(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE))))
							.addGroup(gl_contentPanel.createSequentialGroup()
								.addComponent(getLblMarca())
								.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
								.addComponent(getComboBoxMarca(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)))
						.addGap(5)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblDescrioCompleta())
							.addComponent(getChckbxManual(), GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(getTxtDescCompleta(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.TRAILING)
							.addGroup(gl_contentPanel.createSequentialGroup()
								.addComponent(getLblDescrioReduzida())
								.addPreferredGap(ComponentPlacement.RELATED)
								.addComponent(getTxtDescReduzida(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE))
							.addComponent(getBtnGeraReduzido()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblIncluso())
							.addComponent(getLblAlterao()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(getTabbedPane(), GroupLayout.PREFERRED_SIZE, 291, GroupLayout.PREFERRED_SIZE)
						.addGap(17)
						.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
							.addComponent(getBtnSalvar())
							.addComponent(getBtnSair()))
						.addContainerGap())
			);
			contentPanel.setLayout(gl_contentPanel);
			
			setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public ProdutoCadastro(Produto produto) {
		this();
		setMoldeProduto(produto.getMoldeProduto());
		setProdutoPrincipal(produto);
		setFormProdutoAndSimilares(produto.getSimilaridade());
		((ProdutoCadastroTableModel) getTableComposicao().getModel()).setProdutos(listaComposicaoBySimilaridade(produto.getSimilaridade()));
	}

	private ArrayList<Produto> listaComposicaoBySimilaridade(Similaridade similaridade) {
		ArrayList<Produto> produtos = new ArrayList<Produto>();
		try {
			for (Produto produto : similaridade.getProdutos()) {
				for (Produto produto2 : getAction().findProdutoByProdutoSimilar(produto)) 
					produtos.add(produto2);
			}

		} catch (PersistenceExceptionMessage e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return produtos;
	}

	private void setFormProdutoAndSimilares(Similaridade similaridade) {
		((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).setProdutos(similaridade.getArrayListProdutos());
		((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).excluir(produtoPrincipal);
		
		setFormProdutoPrincipal();
	}

	private void setFormProdutoPrincipal() {
		if (getProdutoPrincipal() != null) {
			getTxtMoldProduto().setText(produtoPrincipal.getMoldeProduto().getDescricao());
			getTxtCodigo().setText(produtoPrincipal.getId() +"");
			getComboBoxMarca().setSelectedItem(produtoPrincipal.getMarca());
			getComboBoxUnidadeVenda().setSelectedItem(produtoPrincipal.getMedidaVenda());
			getFormatterQtdeEmbalagem().setValue(produtoPrincipal.getQtdeEmbalagem());
			getTxtVariacao().setText(produtoPrincipal.getVariavel());
			getChckbxManual().setSelected(produtoPrincipal.getStatusDescricaoManual());
			getTxtDescCompleta().setText(produtoPrincipal.getDescricaoCompleta());
			getTxtDescReduzida().setText(produtoPrincipal.getDescricaoReduzida());
			getTxtBarra1().setText(produtoPrincipal.getBarra1());
			getTxtBarra2().setText(produtoPrincipal.getBarra2());
			getTxtDiasVenc().setText(produtoPrincipal.getDiasVencimento() +"");
			// Estoque
			getFormatterCompProduto().setValue(produtoPrincipal.getDimensaoProdutoComprimento());
			getFormattertLargProduto().setValue(produtoPrincipal.getDimensaoProdutoLargura());
			getFormatterAltuProduto().setValue(produtoPrincipal.getDimensaoProdutoAltura());
			
			getFormatterCompEmbalagem().setValue(produtoPrincipal.getDimensaoEmbalagemComprimento());
			getFormatterLargEmbalagem().setValue(produtoPrincipal.getDimensaoEmbalagemLargura());
			getFormatterAltuEmbalagem().setValue(produtoPrincipal.getDimensaoEmbalagemAltura());
		}
	}

	private JLabel getLblModeloDeProduto() {
		if (lblModeloDeProduto == null) {
			lblModeloDeProduto = new JLabel("Modelo de Produto");
		}
		return lblModeloDeProduto;
	}
	private JTextField getTxtMoldProduto() {
		if (txtMoldProduto == null) {
			txtMoldProduto = new JTextField();
			txtMoldProduto.setFocusable(false);
			txtMoldProduto.setEditable(false);
			txtMoldProduto.setColumns(10);
		}
		return txtMoldProduto;
	}
	private JButton getBtnPesqMarca() {
		if (btnPesqMarca == null) {
			btnPesqMarca = new JButton("");
			btnPesqMarca.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					MarcaPesquisa mp = new MarcaPesquisa();
					mp.setVisible(true);
					if (mp.getMarca() != null) {
						getComboBoxMarca().setSelectedItem(mp.getMarca());
					}
				}
			});
			btnPesqMarca.setPreferredSize(new Dimension(22, 22));
			btnPesqMarca.setMinimumSize(new Dimension(22, 22));
			btnPesqMarca.setMaximumSize(new Dimension(22, 22));
			btnPesqMarca.setIcon(new ImageIcon(ProdutoCadastro.class.getResource("/user/interfaces/icones/Search20.png")));
		}
		return btnPesqMarca;
	}
	private JLabel getLblDescrioCompleta() {
		if (lblDescrioCompleta == null) {
			lblDescrioCompleta = new JLabel("Descri\u00E7\u00E3o Completa");
		}
		return lblDescrioCompleta;
	}
	private JTextField getTxtDescCompleta() {
		if (txtDescCompleta == null) {
			txtDescCompleta = new JTextField();
			txtDescCompleta.setFocusable(false);
			txtDescCompleta.setEditable(false);
			txtDescCompleta.setDocument(new FixedLengthDocument(MAX_LENGTH_DESCRICAO_COMPLETA));
			txtDescCompleta.setMargin(new Insets(0, 0, 0, 0));
			txtDescCompleta.setColumns(10);
		}
		return txtDescCompleta;
	}
	private JLabel getLblMarca() {
		if (lblMarca == null) {
			lblMarca = new JLabel("Marca");
		}
		return lblMarca;
	}
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private JComboBox<?> getComboBoxMarca() {
		if (comboBoxMarca == null) {
			try {
				ArrayList array = getAction().getArrayMarca();
				array.add(0, "");
				comboBoxMarca = new JComboBox(array.toArray());
				comboBoxMarca.setEditable(true);
				comboBoxMarca.addItemListener(new ItemListener() {
					public void itemStateChanged(ItemEvent arg0) {
						loadProdutoCompleto();
					}
				});
			} catch (PersistenceExceptionMessage e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return comboBoxMarca;
	}
	private JLabel getLblNewLabel() {
		if (lblNewLabel == null) {
			lblNewLabel = new JLabel("Quant. Emb.");
		}
		return lblNewLabel;
	}
	private JFormattedTextField getFormatterQtdeEmbalagem() {
		if (formatterQtdeEmbalagem == null) {
			formatterQtdeEmbalagem = new JFormattedTextField();
			formatterQtdeEmbalagem.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent arg0) {
				
				}
				@Override
				public void keyReleased(KeyEvent e) {
					loadProdutoCompleto();
				}
			});
			formatterQtdeEmbalagem.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterQtdeEmbalagem.setValue(new Integer(0));
			formatterQtdeEmbalagem.setFormatterFactory(new DefaultFormatterFactoryMask("#,###", new Integer(1), new Integer(999)));	
			formatterQtdeEmbalagem.setColumns(10);
			formatterQtdeEmbalagem.addFocusListener(new FocusEstadoTextFormatter(getFormatterQtdeEmbalagem()));
					
		
			
		}
		return formatterQtdeEmbalagem;
	}
	private JButton getBtnPesqMolProd() {
		if (btnPesqMolProd == null) {
			btnPesqMolProd = new JButton("");
			btnPesqMolProd.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					MoldeProdutoPesquisa mpp = new MoldeProdutoPesquisa();
					mpp.setVisible(true);
					if (mpp.getMoldeProduto() != null) {
						setMoldeProduto(mpp.getMoldeProduto());
						getFormatterQtdeEmbalagem().setEnabled(true);
						
						if (getMoldeProduto().getMedidaEmbalagem().getTipoMedida() == 'F') {	
							getFormatterQtdeEmbalagem().setValue(new Double(0.00));
							getFormatterQtdeEmbalagem().setFormatterFactory(new DefaultFormatterFactoryMask("#,##0.00", new Double(0.00), new Double(999.99)));			
						} else {
							getFormatterQtdeEmbalagem().setValue(new Integer(0));
							getFormatterQtdeEmbalagem().setFormatterFactory(new DefaultFormatterFactoryMask("#,###", new Integer(1), new Integer(999)));			
						}

						if (getMoldeProduto().getFracionada()) {
							getFormatterQtdeEmbalagem().setFormatterFactory(new DefaultFormatterFactoryMask("#,###", new Integer(1), new Integer(999)));
							getFormatterQtdeEmbalagem().setEnabled(false);
						}
						
						if (getMoldeProduto().getProdutoSimilar()) {
							getTabbedPane().setEnabledAt(1, true);
						} else {
							getTabbedPane().setEnabledAt(1, false);
							if (getTabbedPane().getSelectedIndex() == 1)
								getTabbedPane().setSelectedIndex(0);
						}
						
						
						getComboBoxUnidadeVenda().setSelectedItem(getMoldeProduto().getUnidadeVenda());
						getComboBoxMarca().setSelectedIndex(0);
						setContDeduzido(new Integer(1));
						loadProdutoCompleto();
						

						setProdutoPrincipal(getInstanceFromFormProdutoPrincipal());
					}

				}
				
			});
			btnPesqMolProd.setIcon(new ImageIcon(ProdutoCadastro.class.getResource("/user/interfaces/icones/Search20.png")));
			btnPesqMolProd.setPreferredSize(new Dimension(22, 22));
			btnPesqMolProd.setMinimumSize(new Dimension(22, 22));
			btnPesqMolProd.setMaximumSize(new Dimension(22, 22));
		}
		return btnPesqMolProd;
	}
	public Integer getContDeduzido() {
		if (contDeduzido == null) {
			contDeduzido = new Integer(1);
		}
		return contDeduzido;
	}
	public void setContDeduzido(Integer contDeduzido) {
		this.contDeduzido = contDeduzido;
	}
	private void loadProdutoCompleto() {
		if (getMoldeProduto() != null) {
			getTxtMoldProduto().setText(getMoldeProduto().getDescricao());
			getTxtDescCompleta().setText(getMoldeProduto().getDescricao() +" " +getComboBoxMarca().getSelectedItem() +" " +getMoldeProduto().getEmbalagem().getAbreviacao() +" " +getFormatterQtdeEmbalagem().getText() +getMoldeProduto().getMedidaEmbalagem().getDescricao());
			loadProdutoReduzido();
		}
	}
	private void loadProdutoReduzido() {
		if (getMoldeProduto() != null) {
			String str = getMoldeProduto().getEmbalagem().getAbreviacao() +" " +getFormatterQtdeEmbalagem().getText() +getMoldeProduto().getMedidaEmbalagem().getDescricao();
			getTxtDescReduzida().setText( calculaStrReduzido(getMoldeProduto().getDescricao() +" " +getComboBoxMarca().getSelectedItem().toString(), str.length()) +str);					
		}
	}
	private String calculaStrReduzido(String string, int sizeSubstring) {
		String[] strs = string.split(" ");
		StringBuffer sb = new StringBuffer();
		for (String string2 : strs) {
			for (int i = 0; i < string2.length() && i < getContDeduzido(); i++) {
				sb.append(string2.charAt(i));
			}
			sb.append(" ");
			if (sb.length() + sizeSubstring > 20) {
				if (getContDeduzido() == 1)
					return sb.substring(0, 20 - sizeSubstring - 2) +" ";
				setContDeduzido(new Integer(1));
				return calculaStrReduzido(string, sizeSubstring);
			}
		}
		return sb.toString();
	}
	private JCheckBox getChckbxManual() {
		if (chckbxManual == null) {
			chckbxManual = new JCheckBox("Manual");
			chckbxManual.addActionListener(new ActionListener() {
				
				public void actionPerformed(ActionEvent arg0) {
					// TODO Auto-generated method stub
					if (getChckbxManual().isSelected()) {
						getTxtDescCompleta().setEditable(true);
						getTxtDescReduzida().setEditable(true);
						getTxtDescCompleta().setFocusable(true);
						getTxtDescReduzida().setFocusable(true);
						getBtnGeraReduzido().setEnabled(false);
					} else {
						getTxtDescCompleta().setEditable(false);
						getTxtDescReduzida().setEditable(false);
						getTxtDescCompleta().setFocusable(false);
						getTxtDescReduzida().setFocusable(false);
						getBtnGeraReduzido().setEnabled(true);
						loadProdutoCompleto();
					}
				}
			});
			chckbxManual.setMargin(new Insets(0, 0, 0, 0));
			chckbxManual.setAlignmentY(0.0f);
			chckbxManual.setMinimumSize(new Dimension(17, 16));
			chckbxManual.setMaximumSize(new Dimension(10, 10));
			chckbxManual.setPreferredSize(new Dimension(10, 10));
		}
		return chckbxManual;
	}
	private JLabel getLblDescrioReduzida() {
		if (lblDescrioReduzida == null) {
			lblDescrioReduzida = new JLabel("Descri\u00E7\u00E3o Reduzida");
		}
		return lblDescrioReduzida;
	}
	private JTextField getTxtDescReduzida() {
		if (txtDescReduzida == null) {
			txtDescReduzida = new JTextField();
			txtDescReduzida.setFocusable(false);
			txtDescReduzida.setEditable(false);
			txtDescReduzida.setDocument(new FixedLengthDocument(MAX_LENGTH_DESCRICAO_REDUZIDA));
			txtDescReduzida.setMargin(new Insets(0, 0, 0, 0));
			txtDescReduzida.setColumns(10);
		}
		return txtDescReduzida;
	}
	private JButton getBtnGeraReduzido() {
		if (btnGeraReduzido == null) {
			btnGeraReduzido = new JButton("");
			btnGeraReduzido.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if (!getChckbxManual().isSelected()) {
						setContDeduzido(getContDeduzido() + 1);
						loadProdutoReduzido();
					}
				}
			});
			btnGeraReduzido.setPreferredSize(new Dimension(22, 22));
			btnGeraReduzido.setMinimumSize(new Dimension(22, 22));
			btnGeraReduzido.setMaximumSize(new Dimension(22, 22));
			btnGeraReduzido.setIcon(new ImageIcon(ProdutoCadastro.class.getResource("/user/interfaces/icones/Writing pencil20.png")));
		}
		return btnGeraReduzido;
	}
	private JTabbedPane getTabbedPane() {
		if (tabbedPane == null) {
			tabbedPane = new JTabbedPane(JTabbedPane.TOP);
			tabbedPane.addChangeListener(new ChangeListener() {
				public void stateChanged(ChangeEvent arg0) {
					if (getTabbedPane().getSelectedIndex() == 2) {
						loadComboboxVariacaoComposicao();
					}
				}
			});
			tabbedPane.addTab("Produto", null, getPanelProduto(), null);
			tabbedPane.addTab("Similaridade", null, getPanelSimilaridade(), null);
			tabbedPane.addTab("Composi\u00E7\u00E3o", null, getPanelComposicao(), null);
			tabbedPane.addTab("Decomposi\u00E7\u00E3o", null, getPanelDecomposicao(), null);
		}
		return tabbedPane;
	}
	private void loadComboboxVariacaoComposicao() {
		((ProdutoPesquisaVariacaoCombobox) getComboBoxVariacaoComposicao().getModel()).excluiAll();
		((ProdutoPesquisaVariacaoCombobox) getComboBoxVariacaoComposicao().getModel()).addVarios(((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).getProdutos());
		((ProdutoPesquisaVariacaoCombobox) getComboBoxVariacaoComposicao().getModel()).add(0, getProdutoPrincipal());
		if (!getChckbxTodos().isSelected()) {
			((ProdutoPesquisaVariacaoCombobox) getComboBoxVariacaoComposicao().getModel()).excluiProdutosSimilares(((ProdutoCadastroTableModel) getTableComposicao().getModel()).getProdutos());
		}
		getComboBoxVariacaoComposicao().setSelectedIndex(-1);
		getComboBoxVariacaoComposicao().updateUI();
	}
	private JPanel getPanelProduto() {
		if (panelProduto == null) {
			panelProduto = new JPanel();
			GroupLayout gl_panelProduto = new GroupLayout(panelProduto);
			gl_panelProduto.setHorizontalGroup(
				gl_panelProduto.createParallelGroup(Alignment.TRAILING)
					.addGroup(gl_panelProduto.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelProduto.createParallelGroup(Alignment.TRAILING)
							.addComponent(getPanelEstocagem(), GroupLayout.DEFAULT_SIZE, 264, Short.MAX_VALUE)
							.addComponent(getPanelBarras(), GroupLayout.DEFAULT_SIZE, 252, Short.MAX_VALUE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(getPanelDimensao(), GroupLayout.PREFERRED_SIZE, 187, GroupLayout.PREFERRED_SIZE)
						.addContainerGap())
			);
			gl_panelProduto.setVerticalGroup(
				gl_panelProduto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelProduto.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelProduto.createParallelGroup(Alignment.BASELINE)
							.addGroup(gl_panelProduto.createSequentialGroup()
								.addComponent(getPanelBarras(), GroupLayout.PREFERRED_SIZE, 105, GroupLayout.PREFERRED_SIZE)
								.addGap(4)
								.addComponent(getPanelEstocagem(), GroupLayout.PREFERRED_SIZE, 132, GroupLayout.PREFERRED_SIZE))
							.addComponent(getPanelDimensao(), GroupLayout.PREFERRED_SIZE, 241, GroupLayout.PREFERRED_SIZE))
						.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
			);
			panelProduto.setLayout(gl_panelProduto);
		}
		return panelProduto;
	}
	private JPanel getPanelSimilaridade() {
		if (panelSimilaridade == null) {
			panelSimilaridade = new JPanel();
			GroupLayout gl_panelSimilaridade = new GroupLayout(panelSimilaridade);
			gl_panelSimilaridade.setHorizontalGroup(
				gl_panelSimilaridade.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelSimilaridade.createSequentialGroup()
						.addGroup(gl_panelSimilaridade.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panelSimilaridade.createSequentialGroup()
								.addGap(19)
								.addGroup(gl_panelSimilaridade.createParallelGroup(Alignment.LEADING)
									.addComponent(getTxtVariacaoSimilar(), GroupLayout.PREFERRED_SIZE, 104, GroupLayout.PREFERRED_SIZE)
									.addComponent(getLblVariao_1()))
								.addGap(6)
								.addGroup(gl_panelSimilaridade.createParallelGroup(Alignment.LEADING)
									.addComponent(getLblBarras(), GroupLayout.PREFERRED_SIZE, 77, GroupLayout.PREFERRED_SIZE)
									.addComponent(getTxtBarra1Similar(), GroupLayout.PREFERRED_SIZE, 104, GroupLayout.PREFERRED_SIZE))
								.addPreferredGap(ComponentPlacement.RELATED)
								.addGroup(gl_panelSimilaridade.createParallelGroup(Alignment.LEADING)
									.addComponent(getLblBarras_1(), GroupLayout.PREFERRED_SIZE, 77, GroupLayout.PREFERRED_SIZE)
									.addGroup(gl_panelSimilaridade.createSequentialGroup()
										.addComponent(getTxtBarra2Similar(), GroupLayout.PREFERRED_SIZE, 112, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(ComponentPlacement.RELATED)
										.addComponent(getBtnIncluirSimilar(), GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)))
								.addGap(24))
							.addGroup(gl_panelSimilaridade.createSequentialGroup()
								.addContainerGap()
								.addComponent(getPanelTableSimilares(), GroupLayout.DEFAULT_SIZE, 454, Short.MAX_VALUE)))
						.addContainerGap())
			);
			gl_panelSimilaridade.setVerticalGroup(
				gl_panelSimilaridade.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelSimilaridade.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelSimilaridade.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblBarras())
							.addComponent(getLblBarras_1())
							.addComponent(getLblVariao_1()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelSimilaridade.createParallelGroup(Alignment.BASELINE)
							.addComponent(getTxtVariacaoSimilar(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getTxtBarra2Similar(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getTxtBarra1Similar(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getBtnIncluirSimilar()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(getPanelTableSimilares(), GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)
						.addContainerGap())
			);
			panelSimilaridade.setLayout(gl_panelSimilaridade);
		}
		return panelSimilaridade;
	}
	private JLabel getLblCdigo() {
		if (lblCdigo == null) {
			lblCdigo = new JLabel("C\u00F3digo");
		}
		return lblCdigo;
	}
	private JTextField getTxtCodigo() {
		if (txtCodigo == null) {
			txtCodigo = new JTextField();
			txtCodigo.setText("0000000");
			txtCodigo.setHorizontalAlignment(SwingConstants.CENTER);
			txtCodigo.setFocusable(false);
			txtCodigo.setEditable(false);
			txtCodigo.setColumns(10);
		}
		return txtCodigo;
	}
	private JLabel getLblIncluso() {
		if (lblIncluso == null) {
			lblIncluso = new JLabel("Cadastro: 01/04/2013 - Usu\u00E1rio: 20");
		}
		return lblIncluso;
	}
	private JLabel getLblAlterao() {
		if (lblAlterao == null) {
			lblAlterao = new JLabel("Altera\u00E7\u00E3o: 23/04/2013 - Usu\u00E1rio: 30");
		}
		return lblAlterao;
	}
	private JButton getBtnSalvar() {
		if (btnSalvar == null) {
			btnSalvar = new JButton("Salvar");
			btnSalvar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					try {
						if (getMoldeProduto() != null && getMoldeProduto().getProdutoSimilar()) {
							
							ArrayList<Produto> produtos = getInstancesFromForm();
							Similaridade similaridade = new Similaridade();
							similaridade.setProdutos(produtos);
							similaridade = similaridade.merge();
							
							if (getTableComposicao().getRowCount() > 0) {
								ArrayList<Produto> produtosComposicao = getInstancesFromComposicao();
								for (Produto produtoComp : produtosComposicao) {
									Produto prodSimilar = buscaProdutoSimilarPersistido(produtoComp, similaridade.getProdutos());
									if (prodSimilar != null) {
										produtoComp.setProdutoSimilar(prodSimilar);
										produtoComp.persist();
									}
								}
							}
						
						} else {
							Produto produto = getInstanceFromFormProdutoPrincipal();
							if (produto != null) {
								
									//produto.persist();
								
							}
						}
					} catch (PersistenceExceptionMessage e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			});
		}
		return btnSalvar;
	}
	private Produto buscaProdutoSimilarPersistido(Produto produto,
			Collection<Produto> produtos) {
		for (Produto produto2 : produtos) {
			if (produto2.getVariavel().equals(produto.getProdutoSimilar().getVariavel()) &&
					produto2.getBarra1().equals(produto.getProdutoSimilar().getBarra1()) &&
						produto2.getBarra2().equals(produto.getProdutoSimilar().getBarra2())) {
				return produto2;
			}
		}
		return null;
	}
	private ArrayList<Produto> getInstancesFromComposicao() {
		if (getTableComposicao().getRowCount() > 0) {
			setFormEmProdutosComposicoes();
			ArrayList<Produto> produtos = new ArrayList<Produto>();
			for (Produto produto: ((ProdutoCadastroTableModel)getTableComposicao().getModel()).getProdutos()) {
				produtos.add(produto);
			}
			return produtos;
		}
		return null;
	}
	private ArrayList<Produto> getInstancesFromForm() {
		if (getMoldeProduto() != null) {
			setFormEmProdutoPrincipal();
			setFormEmProdutosSimilares();
			//setFormEmProdutosComposicoes();
			ArrayList<Produto> produtos = new ArrayList<Produto>();
			produtos.add(getProdutoPrincipal());
			for (Produto produto: ((ProdutoCadastroTableModel)getTableSimilaridade().getModel()).getProdutos()) {
				produtos.add(produto);
			}
			return produtos;
		}
		return null;
	}
	
	private void setFormEmProdutoPrincipal() {
		if (getProdutoPrincipal() != null) {
			setFormEmProdutoGenerico(getProdutoPrincipal());
			getProdutoPrincipal().setBarra1(getTxtBarra1().getText());
			getProdutoPrincipal().setBarra2(getTxtBarra2().getText());
			getProdutoPrincipal().setVariavel(getTxtVariacao().getText());
		}
	}
	
	private void setFormEmProdutoGenerico(Produto produto) {
		
		produto.setMoldeProduto(getMoldeProduto());
		if (getComboBoxMarca().getSelectedItem() instanceof Marca)
			produto.setMarca((Marca) getComboBoxMarca().getSelectedItem());
		else 
			produto.setMarca(null);
		
		if (getMoldeProduto().getMedidaEmbalagem().getTipoMedida() == 'F')
			produto.setQtdeEmbalagem((Double) getFormatterQtdeEmbalagem().getValue());
		else
			produto.setQtdeEmbalagem(Double.parseDouble(getFormatterQtdeEmbalagem().getText()));
		
	//	produto.setVariavel(getTxtVariacao().getText());
		
		produto.setStatusDescricaoManual(getChckbxManual().isSelected());
	
		produto.setDescricaoCompleta(getTxtDescCompleta().getText());
		produto.setDescricaoReduzida(getTxtDescReduzida().getText());
		
		//produto.setBarra1(getTxtBarra1().getText());
	//	produto.setBarra2(getTxtBarra2().getText());
		try {
			Integer diasVenc = Integer.parseInt(getTxtDiasVenc().getText());
			produto.setDiasVencimento(diasVenc);
		} catch (Exception e) {
			// TODO: handle exception
		}
		produto.setDimensaoProdutoComprimento((Integer) getFormatterCompProduto().getValue());
		produto.setDimensaoProdutoLargura((Integer) getFormattertLargProduto().getValue());
		produto.setDimensaoProdutoAltura((Integer) getFormatterAltuProduto().getValue());
		
		produto.setDimensaoEmbalagemComprimento((Integer) getFormatterCompEmbalagem().getValue());
		produto.setDimensaoEmbalagemLargura((Integer) getFormatterLargEmbalagem().getValue());
		produto.setDimensaoEmbalagemAltura((Integer) getFormatterAltuEmbalagem().getValue());
	}
	
	private void setFormEmProdutosSimilares() {
		for (Produto produto: ((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).getProdutos()) {
			setFormEmProdutoGenerico(produto);
		}
	}
	
	private void setFormEmProdutosComposicoes() {
		for (Produto produto: ((ProdutoCadastroTableModel) getTableComposicao().getModel()).getProdutos()) {
			setFormEmProdutoGenerico(produto);
		}
	}
	
	private Produto getInstanceFromFormProdutoComposicao() {
		if (getMoldeProduto() != null) {
			return getInstanceFromFormGeneric();
		}
		return null;
	}

	private Produto getInstanceFromFormProdutoSimilar() {
		if (getMoldeProduto() != null) {
			Produto produto = getInstanceFromFormGeneric();
			
			produto.setVariavel(getTxtVariacaoSimilar().getText());
			produto.setBarra1(getTxtBarra1Similar().getText());
			produto.setBarra2(getTxtBarra2Similar().getText());
			
			return produto;
		}
		return null;
	}

	private Produto getInstanceFromFormProdutoPrincipal() {
		if (getMoldeProduto() != null) {
			Produto produto = getInstanceFromFormGeneric();
			
			produto.setVariavel(getTxtVariacao().getText());
			produto.setBarra1(getTxtBarra1().getText());
			produto.setBarra2(getTxtBarra2().getText());
			
			return produto;
		}
		return null;
	}
	private Produto getInstanceFromFormGeneric() { 
		if (getMoldeProduto() != null) {
			
			Produto produto = new Produto();

			produto.setMedidaVenda((Medida) getComboBoxUnidadeVenda().getSelectedItem());
			produto.setMedidaCompra(getMoldeProduto().getMedidaCompra());
			produto.setFatorMedidaCompra(getMoldeProduto().getFatorMedida());
			produto.setMoldeProduto(getMoldeProduto());
			
			if (getComboBoxMarca().getSelectedItem() instanceof Marca)
				produto.setMarca((Marca) getComboBoxMarca().getSelectedItem());
			else 
				produto.setMarca(null);
			
			if (getMoldeProduto().getMedidaEmbalagem().getTipoMedida() == 'F')
				produto.setQtdeEmbalagem((Double) getFormatterQtdeEmbalagem().getValue());
			else
				produto.setQtdeEmbalagem(Double.parseDouble(getFormatterQtdeEmbalagem().getText()));
			
			produto.setStatusDescricaoManual(getChckbxManual().isSelected());
		
			produto.setDescricaoCompleta(getTxtDescCompleta().getText());
			produto.setDescricaoReduzida(getTxtDescReduzida().getText());
			
			try {
				Integer diasVenc = Integer.parseInt(getTxtDiasVenc().getText());
				produto.setDiasVencimento(diasVenc);
			} catch (Exception e) {
				// TODO: handle exception
			}
					// estoque
			produto.setDimensaoProdutoComprimento((Integer) getFormatterCompProduto().getValue());
			produto.setDimensaoProdutoLargura((Integer) getFormattertLargProduto().getValue());
			produto.setDimensaoProdutoAltura((Integer) getFormatterAltuProduto().getValue());
			
			produto.setDimensaoEmbalagemComprimento((Integer) getFormatterCompEmbalagem().getValue());
			produto.setDimensaoEmbalagemLargura((Integer) getFormatterLargEmbalagem().getValue());
			produto.setDimensaoEmbalagemAltura((Integer) getFormatterAltuEmbalagem().getValue());
			
			return produto;
		}
		return null;
	}
	private JButton getBtnSair() {
		if (btnSair == null) {
			btnSair = new JButton("Sair");
			btnSair.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					dispose();
				}
			});
		}
		return btnSair;
	}
	private JPanel getPanelBarras() {
		if (panelBarras == null) {
			panelBarras = new JPanel();
			panelBarras.setBorder(new TitledBorder(null, "C\u00F3digo de barras", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			GroupLayout gl_panelBarras = new GroupLayout(panelBarras);
			gl_panelBarras.setHorizontalGroup(
				gl_panelBarras.createParallelGroup(Alignment.LEADING)
					.addGroup(Alignment.TRAILING, gl_panelBarras.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelBarras.createParallelGroup(Alignment.LEADING)
							.addComponent(getLblBarra_1(), GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE)
							.addComponent(getLblBarra()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelBarras.createParallelGroup(Alignment.LEADING)
							.addComponent(getTxtBarra2(), GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE)
							.addComponent(getTxtBarra1(), GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE))
						.addContainerGap())
			);
			gl_panelBarras.setVerticalGroup(
				gl_panelBarras.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelBarras.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelBarras.createParallelGroup(Alignment.BASELINE)
							.addComponent(getTxtBarra1(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getLblBarra()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelBarras.createParallelGroup(Alignment.BASELINE)
							.addComponent(getTxtBarra2(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getLblBarra_1()))
						.addContainerGap(20, Short.MAX_VALUE))
			);
			panelBarras.setLayout(gl_panelBarras);
		}
		return panelBarras;
	}
	private JTextField getTxtBarra1() {
		if (txtBarra1 == null) {
			txtBarra1 = new JTextField();
			txtBarra1.setHorizontalAlignment(SwingConstants.CENTER);
			txtBarra1.setColumns(10);
			txtBarra1.setDocument(new FixedLengthDocument(MAX_LENGTH_BARRAS, '0', '9'));
		}
		return txtBarra1;
	}
	private JTextField getTxtBarra2() {
		if (txtBarra2 == null) {
			txtBarra2 = new JTextField();
			txtBarra2.setHorizontalAlignment(SwingConstants.CENTER);
			txtBarra2.setColumns(10);
			txtBarra2.setDocument(new FixedLengthDocument(MAX_LENGTH_BARRAS, '0', '9'));
		}
		return txtBarra2;
	}
	private JLabel getLblBarra() {
		if (lblBarra == null) {
			lblBarra = new JLabel("C\u00F3digo de Barras");
		}
		return lblBarra;
	}
	private JLabel getLblBarra_1() {
		if (lblBarra_1 == null) {
			lblBarra_1 = new JLabel("C\u00F3digo de Barras");
		}
		return lblBarra_1;
	}
	private JPanel getPanelDimensao() {
		if (panelDimensao == null) {
			panelDimensao = new JPanel();
			panelDimensao.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Dimens\u00F5es (Cent\u00EDmetro)", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			GroupLayout gl_panelDimensao = new GroupLayout(panelDimensao);
			gl_panelDimensao.setHorizontalGroup(
				gl_panelDimensao.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelDimensao.createSequentialGroup()
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.LEADING)
							.addGroup(Alignment.TRAILING, gl_panelDimensao.createSequentialGroup()
								.addGap(39)
								.addGroup(gl_panelDimensao.createParallelGroup(Alignment.TRAILING)
									.addGroup(gl_panelDimensao.createSequentialGroup()
										.addComponent(getLblComprimento())
										.addPreferredGap(ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
										.addComponent(getFormatterCompProduto(), GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE))
									.addGroup(gl_panelDimensao.createSequentialGroup()
										.addComponent(getLblAltura(), GroupLayout.PREFERRED_SIZE, 63, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
										.addComponent(getFormatterAltuProduto(), GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE))
									.addGroup(gl_panelDimensao.createSequentialGroup()
										.addComponent(getLblLargura(), GroupLayout.PREFERRED_SIZE, 63, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
										.addComponent(getFormattertLargProduto(), GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE))))
							.addGroup(Alignment.TRAILING, gl_panelDimensao.createSequentialGroup()
								.addContainerGap(40, Short.MAX_VALUE)
								.addGroup(gl_panelDimensao.createParallelGroup(Alignment.TRAILING)
									.addGroup(gl_panelDimensao.createSequentialGroup()
										.addComponent(getLabel_2(), GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(ComponentPlacement.RELATED, 38, Short.MAX_VALUE)
										.addComponent(getFormatterAltuEmbalagem(), GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE))
									.addGroup(gl_panelDimensao.createSequentialGroup()
										.addGroup(gl_panelDimensao.createParallelGroup(Alignment.LEADING)
											.addGroup(gl_panelDimensao.createSequentialGroup()
												.addComponent(getLabel())
												.addGap(10))
											.addGroup(gl_panelDimensao.createSequentialGroup()
												.addComponent(getLabel_1(), GroupLayout.DEFAULT_SIZE, 63, Short.MAX_VALUE)
												.addPreferredGap(ComponentPlacement.RELATED)))
										.addGroup(gl_panelDimensao.createParallelGroup(Alignment.TRAILING)
											.addComponent(getFormatterCompEmbalagem(), GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)
											.addComponent(getFormatterLargEmbalagem(), GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)))))
							.addGroup(gl_panelDimensao.createSequentialGroup()
								.addContainerGap()
								.addComponent(getLblProduto(), GroupLayout.PREFERRED_SIZE, 57, GroupLayout.PREFERRED_SIZE))
							.addGroup(gl_panelDimensao.createSequentialGroup()
								.addContainerGap()
								.addComponent(getLblEmbalagem())))
						.addContainerGap())
			);
			gl_panelDimensao.setVerticalGroup(
				gl_panelDimensao.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelDimensao.createSequentialGroup()
						.addComponent(getLblProduto())
						.addGap(12)
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblComprimento())
							.addComponent(getFormatterCompProduto(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblLargura())
							.addComponent(getFormattertLargProduto(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getFormatterAltuProduto(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addComponent(getLblAltura()))
						.addGap(10)
						.addComponent(getLblEmbalagem())
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLabel())
							.addComponent(getFormatterCompEmbalagem(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getFormatterLargEmbalagem(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addComponent(getLabel_1()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelDimensao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getFormatterAltuEmbalagem(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addComponent(getLabel_2()))
						.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
			);
			panelDimensao.setLayout(gl_panelDimensao);
		}
		return panelDimensao;
	}
	private JLabel getLblProduto() {
		if (lblProduto == null) {
			lblProduto = new JLabel("Produto:");
			lblProduto.setFont(new Font("Tahoma", Font.BOLD, 11));
		}
		return lblProduto;
	}
	private JLabel getLblEmbalagem() {
		if (lblEmbalagem == null) {
			lblEmbalagem = new JLabel("Embalagem:");
			lblEmbalagem.setFont(new Font("Tahoma", Font.BOLD, 11));
		}
		return lblEmbalagem;
	}
	private JLabel getLblComprimento() {
		if (lblComprimento == null) {
			lblComprimento = new JLabel("Comprimento");
			lblComprimento.setFont(new Font("Tahoma", Font.PLAIN, 11));
		}
		return lblComprimento;
	}
	private JLabel getLblLargura() {
		if (lblLargura == null) {
			lblLargura = new JLabel("Largura");
			lblLargura.setFont(new Font("Tahoma", Font.PLAIN, 11));
		}
		return lblLargura;
	}
	private JLabel getLblAltura() {
		if (lblAltura == null) {
			lblAltura = new JLabel("Altura");
			lblAltura.setFont(new Font("Tahoma", Font.PLAIN, 11));
		}
		return lblAltura;
	}
	private JFormattedTextField getFormatterCompProduto() {
		if (formatterCompProduto == null) {
			formatterCompProduto = new JFormattedTextField();
			formatterCompProduto.addFocusListener(new FocusEstadoTextFormatter(formatterCompProduto));
			//formatterCompProduto.setValue(new Integer(0));
			formatterCompProduto.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0", new Integer(0), new Integer(99999)));			
			formatterCompProduto.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterCompProduto.setColumns(10);
		}
		return formatterCompProduto;
	}
	private JFormattedTextField getFormattertLargProduto() {
		if (formattertLargProduto == null) {
			formattertLargProduto = new JFormattedTextField();
			formattertLargProduto.addFocusListener(new FocusEstadoTextFormatter(formattertLargProduto));
			//formattertLargProduto.setValue(new Integer(0));
			formattertLargProduto.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0", new Integer(0), new Integer(99999)));			
			formattertLargProduto.setHorizontalAlignment(SwingConstants.RIGHT);
			formattertLargProduto.setColumns(10);
		}
		return formattertLargProduto;
	}
	private JFormattedTextField getFormatterAltuProduto() {
		if (formatterAltuProduto == null) {
			formatterAltuProduto = new JFormattedTextField();
			formatterAltuProduto.addFocusListener(new FocusEstadoTextFormatter(formatterAltuProduto));
			//formatterAltuProduto.setValue(new Integer(0));
			formatterAltuProduto.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0", new Integer(0), new Integer(99999)));			
			formatterAltuProduto.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterAltuProduto.setColumns(10);
		}
		return formatterAltuProduto;
	}
	private JLabel getLabel() {
		if (label == null) {
			label = new JLabel("Comprimento");
			label.setFont(new Font("Tahoma", Font.PLAIN, 11));
		}
		return label;
	}
	private JLabel getLabel_1() {
		if (label_1 == null) {
			label_1 = new JLabel("Largura");
			label_1.setFont(new Font("Tahoma", Font.PLAIN, 11));
		}
		return label_1;
	}
	private JLabel getLabel_2() {
		if (label_2 == null) {
			label_2 = new JLabel("Altura");
			label_2.setFont(new Font("Tahoma", Font.PLAIN, 11));
		}
		return label_2;
	}
	private JFormattedTextField getFormatterAltuEmbalagem() {
		if (formatterAltuEmbalagem == null) {
			formatterAltuEmbalagem = new JFormattedTextField();
			formatterAltuEmbalagem.addFocusListener(new FocusEstadoTextFormatter(formatterAltuEmbalagem));
			//formatterAltuEmbalagem.setValue(new Integer(0));
			formatterAltuEmbalagem.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0", new Integer(0), new Integer(99999)));			
			formatterAltuEmbalagem.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterAltuEmbalagem.setColumns(10);
		}
		return formatterAltuEmbalagem;
	}
	private JFormattedTextField getFormatterLargEmbalagem() {
		if (formatterLargEmbalagem == null) {
			formatterLargEmbalagem = new JFormattedTextField();
			formatterLargEmbalagem.addFocusListener(new FocusEstadoTextFormatter(formatterLargEmbalagem));
			//formatterLargEmbalagem.setValue(new Integer(0));
			formatterLargEmbalagem.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0", new Integer(0), new Integer(99999)));			
			formatterLargEmbalagem.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterLargEmbalagem.setColumns(10);
		}
		return formatterLargEmbalagem;
	}
	private JFormattedTextField getFormatterCompEmbalagem() {
		if (formatterCompEmbalagem == null) {
			formatterCompEmbalagem = new JFormattedTextField();
			formatterCompEmbalagem.addFocusListener(new FocusEstadoTextFormatter(formatterCompEmbalagem));
			//formatterCompEmbalagem.setValue(new Integer(0));
			formatterCompEmbalagem.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0", new Integer(0), new Integer(99999)));			
			formatterCompEmbalagem.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterCompEmbalagem.setColumns(10);
		}
		return formatterCompEmbalagem;
	}
	private JPanel getPanelEstocagem() {
		if (panelEstocagem == null) {
			panelEstocagem = new JPanel();
			panelEstocagem.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Estocagem", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			GroupLayout gl_panelEstocagem = new GroupLayout(panelEstocagem);
			gl_panelEstocagem.setHorizontalGroup(
				gl_panelEstocagem.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelEstocagem.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelEstocagem.createParallelGroup(Alignment.LEADING)
							.addComponent(getLblArmagenamento(), GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE)
							.addComponent(getLblDiasParaVencimento(), GroupLayout.PREFERRED_SIZE, 107, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelEstocagem.createParallelGroup(Alignment.LEADING, false)
							.addComponent(getTxtDiasVenc(), Alignment.TRAILING, 0, 0, Short.MAX_VALUE)
							.addComponent(getComboBoxEstoque(), Alignment.TRAILING, 0, 76, Short.MAX_VALUE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelEstocagem.createParallelGroup(Alignment.TRAILING)
							.addComponent(getBtnPesqEstoque(), GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE)
							.addComponent(getBtnCalcDias(), GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE))
						.addContainerGap(18, Short.MAX_VALUE))
			);
			gl_panelEstocagem.setVerticalGroup(
				gl_panelEstocagem.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelEstocagem.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelEstocagem.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblDiasParaVencimento())
							.addComponent(getTxtDiasVenc(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getBtnCalcDias(), GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelEstocagem.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panelEstocagem.createParallelGroup(Alignment.BASELINE)
								.addComponent(getLblArmagenamento())
								.addComponent(getComboBoxEstoque(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE))
							.addComponent(getBtnPesqEstoque(), GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE))
						.addContainerGap(43, Short.MAX_VALUE))
			);
			panelEstocagem.setLayout(gl_panelEstocagem);
		}
		return panelEstocagem;
	}
	private JLabel getLblArmagenamento() {
		if (lblArmagenamento == null) {
			lblArmagenamento = new JLabel("Estoque");
		}
		return lblArmagenamento;
	}
	private JLabel getLblDiasParaVencimento() {
		if (lblDiasParaVencimento == null) {
			lblDiasParaVencimento = new JLabel("Dias p/Vencimento");
		}
		return lblDiasParaVencimento;
	}
	private JTextField getTxtDiasVenc() {
		if (txtDiasVenc == null) {
			txtDiasVenc = new JTextField();
			txtDiasVenc.setHorizontalAlignment(SwingConstants.RIGHT);
			txtDiasVenc.setDocument(new FixedLengthDocument(4, '0', '9'));
			txtDiasVenc.setColumns(10);
		}
		return txtDiasVenc;
	}
	@SuppressWarnings("rawtypes")
	private JComboBox<?> getComboBoxEstoque() {
		if (comboBoxEstoque == null) {
			comboBoxEstoque = new JComboBox();
		}
		return comboBoxEstoque;
	}
	private JButton getBtnPesqEstoque() {
		if (btnPesqEstoque == null) {
			btnPesqEstoque = new JButton("");
			btnPesqEstoque.setIcon(new ImageIcon(ProdutoCadastro.class.getResource("/user/interfaces/icones/Search20.png")));
			btnPesqEstoque.setPreferredSize(new Dimension(24, 24));
			btnPesqEstoque.setMinimumSize(new Dimension(24, 24));
			btnPesqEstoque.setMaximumSize(new Dimension(24, 24));
		}
		return btnPesqEstoque;
	}
	private JButton getBtnCalcDias() {
		if (btnCalcDias == null) {
			btnCalcDias = new JButton("");
			btnCalcDias.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					CalculaDiasEntreDatas cded = new CalculaDiasEntreDatas();
					cded.setVisible(true);
					if (cded.getNumDias() != null) {
						getTxtDiasVenc().setText(cded.getNumDias().toString());
					}
				}
			});
			btnCalcDias.setIcon(new ImageIcon(ProdutoCadastro.class.getResource("/user/interfaces/icones/Calculator20.png")));
			btnCalcDias.setPreferredSize(new Dimension(22, 22));
			btnCalcDias.setMinimumSize(new Dimension(22, 22));
			btnCalcDias.setMaximumSize(new Dimension(22, 22));
		}
		return btnCalcDias;
	}
	private JPanel getPanelComposicao() {
		if (panelComposicao == null) {
			panelComposicao = new JPanel();
			panelComposicao.setDoubleBuffered(false);
			GroupLayout gl_panelComposicao = new GroupLayout(panelComposicao);
			gl_panelComposicao.setHorizontalGroup(
				gl_panelComposicao.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelComposicao.createSequentialGroup()
						.addGap(20)
						.addGroup(gl_panelComposicao.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panelComposicao.createSequentialGroup()
								.addComponent(getLblVariao_2())
								.addGap(18)
								.addComponent(getChckbxTodos())
								.addContainerGap())
							.addGroup(gl_panelComposicao.createSequentialGroup()
								.addComponent(getComboBoxVariacaoComposicao(), GroupLayout.PREFERRED_SIZE, 153, GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.RELATED, 97, Short.MAX_VALUE)
								.addComponent(getBtnAdicionarComposicao(), GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.RELATED)
								.addComponent(getButton_5_1(), GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE)
								.addGap(31))))
					.addGroup(gl_panelComposicao.createSequentialGroup()
						.addContainerGap()
						.addComponent(getPanelTableComp(), GroupLayout.DEFAULT_SIZE, 454, Short.MAX_VALUE)
						.addContainerGap())
			);
			gl_panelComposicao.setVerticalGroup(
				gl_panelComposicao.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelComposicao.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelComposicao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblVariao_2())
							.addComponent(getChckbxTodos()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelComposicao.createParallelGroup(Alignment.BASELINE)
							.addComponent(getComboBoxVariacaoComposicao(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
							.addComponent(getButton_5_1())
							.addComponent(getBtnAdicionarComposicao()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(getPanelTableComp(), GroupLayout.PREFERRED_SIZE, 192, GroupLayout.PREFERRED_SIZE)
						.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
			);
			panelComposicao.setLayout(gl_panelComposicao);
		}
		return panelComposicao;
	}
	private JLabel getLblVariao_1() {
		if (lblVariao_1 == null) {
			lblVariao_1 = new JLabel("Varia\u00E7\u00E3o");
		}
		return lblVariao_1;
	}
	private JTextField getTxtVariacaoSimilar() {
		if (txtVariacaoSimilar == null) {
			txtVariacaoSimilar = new JTextField();
			txtVariacaoSimilar.setDocument(new FixedLengthDocument(MAX_LENGTH_VARIAVEL));
			txtVariacaoSimilar.setColumns(10);
		}
		return txtVariacaoSimilar;
	}
	private JLabel getLblBarras() {
		if (lblBarras == null) {
			lblBarras = new JLabel("Barras");
		}
		return lblBarras;
	}
	private JLabel getLblBarras_1() {
		if (lblBarras_1 == null) {
			lblBarras_1 = new JLabel("Barras");
		}
		return lblBarras_1;
	}
	private JTextField getTxtBarra2Similar() {
		if (txtBarra2Similar == null) {
			txtBarra2Similar = new JTextField();
			txtBarra2Similar.setHorizontalAlignment(SwingConstants.CENTER);
			txtBarra2Similar.setColumns(10);
			txtBarra2Similar.setDocument(new FixedLengthDocument(MAX_LENGTH_BARRAS, '0', '9'));
		}
		return txtBarra2Similar;
	}
	private JTextField getTxtBarra1Similar() {
		if (txtBarra1Similar == null) {
			txtBarra1Similar = new JTextField();
			txtBarra1Similar.setHorizontalAlignment(SwingConstants.CENTER);
			txtBarra1Similar.setColumns(10);
			txtBarra1Similar.setDocument(new FixedLengthDocument(MAX_LENGTH_BARRAS, '0', '9'));
		}
		return txtBarra1Similar;
	}
	private JButton getBtnIncluirSimilar() {
		if (btnIncluirSimilar == null) {
			btnIncluirSimilar = new JButton("Incluir");
			btnIncluirSimilar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					 
					if (!isAlterarSimiliar()) {
						Produto produto = getInstanceFromFormProdutoSimilar();
						if (produto != null) {
							((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).inserir(produto);
							clearFormSimilaridade();
						}
					} else {
						Produto produto = ((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).getProduto(getLinhaAlteracaoSimilaridade());
						Produto produtoComp = buscaComposicaoBySimilar(produto);
						
						produto.setBarra1(getTxtBarra1Similar().getText());
						produto.setBarra2(getTxtBarra2Similar().getText());
						produto.setVariavel(getTxtVariacaoSimilar().getText());
						
						if (produtoComp!=null) {
							produtoComp.setVariavel(produto.getVariavel());
							((ProdutoCadastroTableModel) getTableComposicao().getModel()).fireTableDataChanged();
						}
						
						((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).fireTableDataChanged();
						getBtnIncluirSimilar().setText("Incluir");
						clearFormSimilaridade();
					}
				}
			});
		}
		return btnIncluirSimilar;
	}

	private Produto buscaComposicaoBySimilar(Produto produto) {
		for (Produto produtoCom : ((ProdutoCadastroTableModel) getTableComposicao().getModel()).getProdutos()) {
			if (produtoCom.getProdutoSimilar().equals(produto))
				return produtoCom;
		}
		return null;
	}
	
	private void clearFormSimilaridade() {
		getTxtVariacaoSimilar().setText("");
		getTxtBarra1Similar().setText("");
		getTxtBarra2Similar().setText("");
		setAlterarSimiliar(false);
		setLinhaAlteracaoSimilaridade(null); 
	}

	private JPanel getPanelTableSimilares() {
		if (panelTableSimilares == null) {
			panelTableSimilares = new JPanel();
			panelTableSimilares.setBorder(new TitledBorder(null, "Similares", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			GroupLayout gl_panelTableSimilares = new GroupLayout(panelTableSimilares);
			gl_panelTableSimilares.setHorizontalGroup(
				gl_panelTableSimilares.createParallelGroup(Alignment.LEADING)
					.addComponent(getScrollPane(), GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
					.addGroup(Alignment.TRAILING, gl_panelTableSimilares.createSequentialGroup()
						.addContainerGap(336, Short.MAX_VALUE)
						.addComponent(getBtnExcluir(), GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
						.addContainerGap())
			);
			gl_panelTableSimilares.setVerticalGroup(
				gl_panelTableSimilares.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelTableSimilares.createSequentialGroup()
						.addComponent(getScrollPane(), GroupLayout.PREFERRED_SIZE, 136, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.RELATED, 9, Short.MAX_VALUE)
						.addComponent(getBtnExcluir()))
			);
			panelTableSimilares.setLayout(gl_panelTableSimilares);
		}
		return panelTableSimilares;
	}
	private JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setViewportView(getTableSimilaridade());
		}
		return scrollPane;
	}
	private void setFormSimilaridadeForAlter() {
		Produto produto = getObjectSimilarSelecionado();
		if (produto != null) {
			getTxtVariacaoSimilar().setText(produto.getVariavel());
			getTxtBarra1Similar().setText(produto.getBarra1());
			getTxtBarra2Similar().setText(produto.getBarra2());
			getBtnIncluirSimilar().setText("Alterar");
			setAlterarSimiliar(true);
			setLinhaAlteracaoSimilaridade(getTableSimilaridade().getSelectedRow());
		}
	}
	private Integer getLinhaAlteracaoSimilaridade() {
		return this.linhaAlteracaoSimilaridade;
	}
	private void setLinhaAlteracaoSimilaridade(Integer linhaAlteracaoSimilaridade) {
		this.linhaAlteracaoSimilaridade = linhaAlteracaoSimilaridade;
	}
	private JTable getTableSimilaridade() {
		if (tableSimilaridade == null) {
			tableSimilaridade = new JTable();
			tableSimilaridade.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent arg0) {
					if (arg0.getClickCount() == 2) {
						setFormSimilaridadeForAlter();
					}
				}
				
			});
			tableSimilaridade.setRowSelectionAllowed(true);
			tableSimilaridade.setFillsViewportHeight(true);
			
			tableSimilaridade.setModel(new ProdutoCadastroTableModel());
			
			tableSimilaridade.getColumnModel().getColumn(0).setResizable(false);
			tableSimilaridade.getColumnModel().getColumn(0).setPreferredWidth(60);
			tableSimilaridade.getColumnModel().getColumn(0).setMinWidth(60);
			tableSimilaridade.getColumnModel().getColumn(1).setResizable(false);
			tableSimilaridade.getColumnModel().getColumn(1).setPreferredWidth(80);
			tableSimilaridade.getColumnModel().getColumn(1).setMinWidth(80);
			tableSimilaridade.getColumnModel().getColumn(2).setResizable(false);
			tableSimilaridade.getColumnModel().getColumn(2).setPreferredWidth(103);
			tableSimilaridade.getColumnModel().getColumn(2).setMinWidth(103);
			tableSimilaridade.getColumnModel().getColumn(3).setResizable(false);
			tableSimilaridade.getColumnModel().getColumn(3).setPreferredWidth(103);
			tableSimilaridade.getColumnModel().getColumn(3).setMinWidth(103);
			tableSimilaridade.getColumnModel().getColumn(4).setResizable(false);
			tableSimilaridade.getColumnModel().getColumn(4).setPreferredWidth(41);
			tableSimilaridade.getColumnModel().getColumn(4).setMinWidth(41);
			tableSimilaridade.getColumnModel().getColumn(5).setResizable(false);
			tableSimilaridade.getColumnModel().getColumn(5).setPreferredWidth(60);
			tableSimilaridade.getColumnModel().getColumn(5).setMinWidth(60);
		}
		return tableSimilaridade;
	}
	private JButton getBtnExcluir() {
		if (btnExcluir == null) {
			btnExcluir = new JButton("Excluir");
			btnExcluir.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					Produto produto = getObjectSimilarSelecionado();
					if (produto != null) {
						((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).excluir(produto);
					}
				}
			});
		}
		return btnExcluir;
	}

	private Produto getObjectSimilarSelecionado() {
		int linha = getTableSimilaridade().getSelectedRow();
		if (linha >= 0) {
			return ((ProdutoCadastroTableModel) getTableSimilaridade().getModel()).getProduto(linha);
		}
		return null;
	}
	private JPanel getPanelDecomposicao() {
		if (panelDecomposicao == null) {
			panelDecomposicao = new JPanel();
			GroupLayout gl_panelDecomposicao = new GroupLayout(panelDecomposicao);
			gl_panelDecomposicao.setHorizontalGroup(
				gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelDecomposicao.createSequentialGroup()
						.addGap(18)
						.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panelDecomposicao.createSequentialGroup()
								.addComponent(getFormatterCodProdutoDecomposicao(), GroupLayout.PREFERRED_SIZE, 78, GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.RELATED)
								.addComponent(getBtnPesquisaProdutoDecom(), GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE))
							.addComponent(getLblProduto_1()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
							.addComponent(getFormatterFracaoDecomp(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addComponent(getLblFrao()))
						.addPreferredGap(ComponentPlacement.RELATED)
						.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
							.addComponent(getFormatterFatorDecomp(), GroupLayout.PREFERRED_SIZE, 86, GroupLayout.PREFERRED_SIZE)
							.addGroup(gl_panelDecomposicao.createSequentialGroup()
								.addComponent(getLblFator())
								.addPreferredGap(ComponentPlacement.RELATED, 138, Short.MAX_VALUE)))
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addComponent(getBtnIncluirDecomp(), GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
						.addGap(32))
					.addGroup(gl_panelDecomposicao.createSequentialGroup()
						.addContainerGap()
						.addComponent(getPanelTableDecomp(), GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addContainerGap())
			);
			gl_panelDecomposicao.setVerticalGroup(
				gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_panelDecomposicao.createSequentialGroup()
						.addContainerGap()
						.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panelDecomposicao.createSequentialGroup()
								.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.BASELINE)
									.addComponent(getLblProduto_1())
									.addComponent(getLblFrao()))
								.addPreferredGap(ComponentPlacement.RELATED)
								.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.LEADING)
									.addGroup(gl_panelDecomposicao.createParallelGroup(Alignment.BASELINE)
										.addComponent(getFormatterFracaoDecomp(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
										.addComponent(getFormatterFatorDecomp(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
										.addComponent(getBtnIncluirDecomp()))
									.addComponent(getFormatterCodProdutoDecomposicao(), GroupLayout.PREFERRED_SIZE, 22, GroupLayout.PREFERRED_SIZE)
									.addComponent(getBtnPesquisaProdutoDecom(), GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE))
								.addPreferredGap(ComponentPlacement.RELATED)
								.addComponent(getPanelTableDecomp(), GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
							.addComponent(getLblFator()))
						.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
			);
			panelDecomposicao.setLayout(gl_panelDecomposicao);
		}
		return panelDecomposicao;
	}
	
	private JLabel getLblVariao_2() {
		if (lblVariao_2 == null) {
			lblVariao_2 = new JLabel("Varia\u00E7\u00E3o");
		}
		return lblVariao_2;
	}
	
	@SuppressWarnings({"rawtypes", "unchecked" })
	private JComboBox<?> getComboBoxVariacaoComposicao() {
		if (comboBoxVariacaoComposicao == null) {
			comboBoxVariacaoComposicao = new JComboBox(new ProdutoPesquisaVariacaoCombobox());
			comboBoxVariacaoComposicao.setRenderer(new ProdutoComboboxComposicao());
		}
		return comboBoxVariacaoComposicao;
	}
	
	@SuppressWarnings("rawtypes")
	class ProdutoComboboxComposicao extends JLabel implements ListCellRenderer {
		
		public ProdutoComboboxComposicao() {
			setOpaque(true);
	    }
		
		public Component getListCellRendererComponent(JList list, Object value,
				int index, boolean isSelected, boolean cellHasFocus) {
		
			if (isSelected) {
	            setBackground(list.getSelectionBackground());
	            setForeground(list.getSelectionForeground());
	        } else {
	            setBackground(list.getBackground());
	            setForeground(list.getForeground());
	        }
			
			if (value instanceof Produto) {
				setText(((Produto) value).getVariavel());
			} else {
				setText("");
			}
			return this;
		}
		
	}
	
	private JButton getBtnAdicionarComposicao() {
		if (btnAdicionarComposicao == null) {
			btnAdicionarComposicao = new JButton("Adicionar");
			btnAdicionarComposicao.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					if (getComboBoxVariacaoComposicao().getSelectedItem() instanceof Produto) {
						Produto produto = getInstanceFromFormProdutoComposicao();
						if (produto != null) {
							produto.setProdutoSimilar((Produto) getComboBoxVariacaoComposicao().getSelectedItem());
							ProdutoAdicionarComposicao pac = new ProdutoAdicionarComposicao(getMoldeProduto(), produto);
							pac.setVisible(true);
							if (pac.getProduto() != null) {
								((ProdutoCadastroTableModel) getTableComposicao().getModel()).inserir(produto);
								loadComboboxVariacaoComposicao();
							}
						}
					} else 
						System.out.println("Selecione uma variacao");
				}

			});
		}
		return btnAdicionarComposicao;
	}

	private JButton getButton_5_1() {
		if (btnAlterarComposicao == null) {
			btnAlterarComposicao = new JButton("Alterar");
			btnAlterarComposicao.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					alterProdutoComposicao();
				}
			});
		}
		return btnAlterarComposicao;
	}
	private void alterProdutoComposicao() {
			Produto produto = getObjectComposicaoSelecionado();
			if (produto != null) {
				ProdutoAdicionarComposicao pac = new ProdutoAdicionarComposicao(produto);
				pac.setVisible(true);
				((ProdutoCadastroTableModel) getTableComposicao().getModel()).fireTableDataChanged();	
			}
	}
	
	private JPanel getPanelTableComp() {
		if (panelTableComp == null) {
			panelTableComp = new JPanel();
			panelTableComp.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Composi\u00E7\u00F5es", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			GroupLayout gl_panelTableComp = new GroupLayout(panelTableComp);
			gl_panelTableComp.setHorizontalGroup(
				gl_panelTableComp.createParallelGroup(Alignment.TRAILING)
					.addGap(0, 445, Short.MAX_VALUE)
					.addComponent(getScrollPane_1(), GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
					.addGroup(gl_panelTableComp.createSequentialGroup()
						.addContainerGap(336, Short.MAX_VALUE)
						.addComponent(getButton_5_2(), GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
						.addContainerGap())
			);
			gl_panelTableComp.setVerticalGroup(
				gl_panelTableComp.createParallelGroup(Alignment.LEADING)
					.addGap(0, 192, Short.MAX_VALUE)
					.addGroup(gl_panelTableComp.createSequentialGroup()
						.addComponent(getScrollPane_1(), GroupLayout.PREFERRED_SIZE, 136, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.RELATED, 9, Short.MAX_VALUE)
						.addComponent(getButton_5_2()))
			);
			panelTableComp.setLayout(gl_panelTableComp);
		}
		return panelTableComp;
	}
	private JScrollPane getScrollPane_1() {
		if (scrollPane_1 == null) {
			scrollPane_1 = new JScrollPane();
			scrollPane_1.setViewportView(getTableComposicao());
		}
		return scrollPane_1;
	}
	private JButton getButton_5_2() {
		if (btnExcluirComposicao == null) {
			btnExcluirComposicao = new JButton("Excluir");
			btnExcluirComposicao.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					Produto produto = getObjectComposicaoSelecionado();
					if (produto != null) {
						((ProdutoCadastroTableModel) getTableComposicao().getModel()).excluir(produto);
						loadComboboxVariacaoComposicao();
					}
				}
			});
		}
		return btnExcluirComposicao;
	}
	private Produto getObjectComposicaoSelecionado() {
		int linha = getTableComposicao().getSelectedRow();
		if (linha >= 0)
			return ((ProdutoCadastroTableModel) getTableComposicao().getModel()).getProduto(linha);
		return null;
	}
	private JTable getTableComposicao() {
		if (tableComposicao == null) {
			tableComposicao = new JTable();
			tableComposicao.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent arg0) {
					if (arg0.getClickCount() == 2)
						alterProdutoComposicao();
				}
			});
			tableComposicao.setModel(new ProdutoCadastroTableModel());
			tableComposicao.getColumnModel().getColumn(0).setResizable(false);
			tableComposicao.getColumnModel().getColumn(0).setPreferredWidth(60);
			tableComposicao.getColumnModel().getColumn(0).setMinWidth(60);
			tableComposicao.getColumnModel().getColumn(1).setResizable(false);
			tableComposicao.getColumnModel().getColumn(1).setPreferredWidth(80);
			tableComposicao.getColumnModel().getColumn(1).setMinWidth(80);
			tableComposicao.getColumnModel().getColumn(2).setResizable(false);
			tableComposicao.getColumnModel().getColumn(2).setPreferredWidth(103);
			tableComposicao.getColumnModel().getColumn(2).setMinWidth(103);
			tableComposicao.getColumnModel().getColumn(3).setResizable(false);
			tableComposicao.getColumnModel().getColumn(3).setPreferredWidth(103);
			tableComposicao.getColumnModel().getColumn(3).setMinWidth(103);
			tableComposicao.getColumnModel().getColumn(4).setResizable(false);
			tableComposicao.getColumnModel().getColumn(4).setPreferredWidth(41);
			tableComposicao.getColumnModel().getColumn(4).setMinWidth(41);
			tableComposicao.getColumnModel().getColumn(5).setResizable(false);
			tableComposicao.getColumnModel().getColumn(5).setPreferredWidth(60);
			tableComposicao.getColumnModel().getColumn(5).setMinWidth(60);
			tableComposicao.setFillsViewportHeight(true);
		}
		return tableComposicao;
	}
	private JFormattedTextField getFormatterCodProdutoDecomposicao() {
		if (formatterCodProdutoDecomposicao == null) {
			try {
				MaskFormatter mf = new MaskFormatter("######-#");
				formatterCodProdutoDecomposicao = new JFormattedTextField(mf);
				formatterCodProdutoDecomposicao.setHorizontalAlignment(SwingConstants.CENTER);
				formatterCodProdutoDecomposicao.setColumns(10);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return formatterCodProdutoDecomposicao;
	}
	private JLabel getLblProduto_1() {
		if (lblProduto_1 == null) {
			lblProduto_1 = new JLabel("C\u00F3d. Produto");
		}
		return lblProduto_1;
	}
	private JButton getBtnPesquisaProdutoDecom() {
		if (btnPesquisaProdutoDecom == null) {
			btnPesquisaProdutoDecom = new JButton("");
			btnPesquisaProdutoDecom.setIcon(new ImageIcon(ProdutoCadastro.class.getResource("/user/interfaces/icones/Search20.png")));
			btnPesquisaProdutoDecom.setPreferredSize(new Dimension(22, 22));
			btnPesquisaProdutoDecom.setMinimumSize(new Dimension(22, 22));
			btnPesquisaProdutoDecom.setMaximumSize(new Dimension(22, 22));
		}
		return btnPesquisaProdutoDecom;
	}
	private JFormattedTextField getFormatterFracaoDecomp() {
		if (formatterFracaoDecomp == null) {
			formatterFracaoDecomp = new JFormattedTextField();
			formatterFracaoDecomp.addFocusListener(new FocusEstadoTextFormatter(formatterFracaoDecomp));
			formatterFracaoDecomp.setValue(new Double(0.00));
			formatterFracaoDecomp.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0.00", new Double(0.00), new Double(99.99)));		
			formatterFracaoDecomp.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterFracaoDecomp.setColumns(10);
		}
		return formatterFracaoDecomp;
	}
	private JButton getBtnIncluirDecomp() {
		if (btnIncluirDecomp == null) {
			btnIncluirDecomp = new JButton("Incluir");
		}
		return btnIncluirDecomp;
	}
	private JPanel getPanelTableDecomp() {
		if (panelTableDecomp == null) {
			panelTableDecomp = new JPanel();
			panelTableDecomp.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Decomposi\u00E7\u00F5es", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			GroupLayout gl_panelTableDecomp = new GroupLayout(panelTableDecomp);
			gl_panelTableDecomp.setHorizontalGroup(
				gl_panelTableDecomp.createParallelGroup(Alignment.TRAILING)
					.addGroup(Alignment.LEADING, gl_panelTableDecomp.createSequentialGroup()
						.addContainerGap()
						.addComponent(getLblPercentualNoInformado())
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(getLabel_3())
						.addPreferredGap(ComponentPlacement.RELATED, 148, Short.MAX_VALUE)
						.addComponent(getBtnExcluirDecomp(), GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
						.addContainerGap())
					.addComponent(getScrollPane_2(), GroupLayout.DEFAULT_SIZE, 443, Short.MAX_VALUE)
			);
			gl_panelTableDecomp.setVerticalGroup(
				gl_panelTableDecomp.createParallelGroup(Alignment.TRAILING)
					.addGroup(gl_panelTableDecomp.createSequentialGroup()
						.addComponent(getScrollPane_2(), GroupLayout.PREFERRED_SIZE, 138, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
						.addGroup(gl_panelTableDecomp.createParallelGroup(Alignment.BASELINE)
							.addComponent(getLblPercentualNoInformado())
							.addComponent(getLabel_3())
							.addComponent(getBtnExcluirDecomp())))
			);
			panelTableDecomp.setLayout(gl_panelTableDecomp);
		}
		return panelTableDecomp;
	}
	private JScrollPane getScrollPane_2() {
		if (scrollPane_2 == null) {
			scrollPane_2 = new JScrollPane();
			scrollPane_2.setViewportView(getTableDecomposicao());
		}
		return scrollPane_2;
	}
	private JButton getBtnExcluirDecomp() {
		if (btnExcluirDecomp == null) {
			btnExcluirDecomp = new JButton("Excluir");
		}
		return btnExcluirDecomp;
	}
	private JTable getTableDecomposicao() {
		if (tableDecomposicao == null) {
			tableDecomposicao = new JTable();
			tableDecomposicao.setModel(new DefaultTableModel(
				new Object[][] {
					{null, null, null},
				},
				new String[] {
					"C\u00F3digo", "Descri\u00E7\u00E3o", "Participa\u00E7\u00E3o"
				}
			));
			tableDecomposicao.getColumnModel().getColumn(0).setPreferredWidth(65);
			tableDecomposicao.getColumnModel().getColumn(0).setMinWidth(65);
			tableDecomposicao.getColumnModel().getColumn(0).setMaxWidth(65);
			tableDecomposicao.getColumnModel().getColumn(1).setPreferredWidth(290);
			tableDecomposicao.getColumnModel().getColumn(1).setMinWidth(290);
			tableDecomposicao.getColumnModel().getColumn(1).setMaxWidth(290);
			tableDecomposicao.getColumnModel().getColumn(2).setPreferredWidth(80);
			tableDecomposicao.getColumnModel().getColumn(2).setMinWidth(80);
			tableDecomposicao.getColumnModel().getColumn(2).setMaxWidth(80);
			tableDecomposicao.setFillsViewportHeight(true);
		}
		return tableDecomposicao;
	}
	private JLabel getLblPercentualNoInformado() {
		if (lblPercentualNoInformado == null) {
			lblPercentualNoInformado = new JLabel("Percentual n\u00E3o informado: ");
			lblPercentualNoInformado.setFont(new Font("Tahoma", Font.BOLD, 11));
		}
		return lblPercentualNoInformado;
	}
	private JLabel getLabel_3() {
		if (label_3 == null) {
			label_3 = new JLabel("100%");
		}
		return label_3;
	}
	private JLabel getLabel_4() {
		if (label_4 == null) {
			label_4 = new JLabel("Varia\u00E7\u00E3o");
		}
		return label_4;
	}
	private JTextField getTxtVariacao() {
		if (txtVariacao == null) {
			txtVariacao = new JTextField();
			txtVariacao.addFocusListener(new FocusAdapter() {
				@Override
				public void focusLost(FocusEvent arg0) {
					Produto produto = buscaComposicaoBySimilar(getProdutoPrincipal());
					setFormEmProdutoPrincipal();
					if (produto != null) {
						produto.setVariavel(getProdutoPrincipal().getVariavel());
						((ProdutoCadastroTableModel) getTableComposicao().getModel()).fireTableDataChanged();
					}
					loadComboboxVariacaoComposicao();
				}
			});
			txtVariacao.setDocument(new FixedLengthDocument(MAX_LENGTH_VARIAVEL));
			txtVariacao.setColumns(10);
		}
		return txtVariacao;
	}
	
	private JFormattedTextField getFormatterFatorDecomp() {
		if (formatterFatorDecomp == null) {
			formatterFatorDecomp = new JFormattedTextField();
			formatterFatorDecomp.addFocusListener(new FocusEstadoTextFormatter(formatterFatorDecomp));
			formatterFatorDecomp.setValue(new Double(0.00));
			formatterFatorDecomp.setFormatterFactory(new DefaultFormatterFactoryMask("#,##0.00", new Double(0.00), new Double(9999.99)));
			formatterFatorDecomp.setHorizontalAlignment(SwingConstants.RIGHT);
			formatterFatorDecomp.setColumns(10);
		}
		return formatterFatorDecomp;
	}
	private JLabel getLblFrao() {
		if (lblFrao == null) {
			lblFrao = new JLabel("Fra\u00E7\u00E3o (%)");
		}
		return lblFrao;
	}
	private JLabel getLblFator() {
		if (lblFator == null) {
			lblFator = new JLabel("Fator");
		}
		return lblFator;
	}

	public MoldeProduto getMoldeProduto() {
		return moldeProduto;
	}

	public void setMoldeProduto(MoldeProduto moldeProduto) {
		this.moldeProduto = moldeProduto;
	}
	public ProdutoActionManager getAction() {
		if (action == null) {
			action = new ProdutoActionManager();
		}
		return action;
	}

	public void setAction(ProdutoActionManager action) {
		this.action = action;
	}
	
	private JCheckBox getChckbxTodos() {
		if (chckbxTodos == null) {
			chckbxTodos = new JCheckBox("Todos");
			chckbxTodos.addItemListener(new ItemListener() {
				public void itemStateChanged(ItemEvent arg0) {
					loadComboboxVariacaoComposicao();
				}
			});
		}
		return chckbxTodos;
	}

	public boolean isAlterarSimiliar() {
		return alterarSimiliar;
	}

	public void setAlterarSimiliar(boolean alterarSimiliar) {
		this.alterarSimiliar = alterarSimiliar;
	}

	public Produto getProdutoPrincipal() {
		return produtoPrincipal;
	}

	public void setProdutoPrincipal(Produto produtoPrincipal) {
		this.produtoPrincipal = produtoPrincipal;
	}
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private JComboBox<?> getComboBoxUnidadeVenda() {
		if (comboBoxUnidadeVenda == null) {
			try {
				ArrayList array = (ArrayList) (new MoldeProdutoActionManager()).getArrayMedida();
				array.add(0, "");
				comboBoxUnidadeVenda = new JComboBox(array.toArray());
			} catch (PersistenceExceptionMessage e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return comboBoxUnidadeVenda;
	}
	private JLabel getLblUnidVen() {
		if (lblUnidVen == null) {
			lblUnidVen = new JLabel("Unid. Ven.");
		}
		return lblUnidVen;
	}
}